# Minix/X68k のインストール手順

更新記録
2001/08/27 カーネルの再構築に一部、間違いがあったため修正。

### ハードウェア環境

1. 機種：X68000 ACE
2. 外付け SCSI-HD(180MB, ID=0)
3. MEMORY 6MB

ここでは、Minix/X68kのインストールの手順について、自分が実際にインストールした順路を示します。ここでの用語については一般的なUNIX用語を使っているつもりなので、わからない場合はUNIX関連の書籍等を調べてください。
また、> 及び $ はそれぞれ Human-OS 上でのプロンプト、Minix/X68k 上でのプロンプトを表します。

###
1. Minix/X68kを入手する。

Minix/X68kを入手します。実際これが無いと始まらない。しかし！2001年1月現在では、いろいろ探してみたがどこにもありません。（実は置いてあるほとんどのホストが既に立ち上がっていない）
そこで、以前ダウンロードしておいたものをここに置いておきますのでこれを使ってください。但し、GNU zip で圧縮してあるので解凍して使用してください。

###
2. 入手したMinix/X68kを使ってフロッピーディスクを作成する。

フロッピーディスクを2HCでフォーマットします。(6枚)
しかし、ここで私は引っかかってしまった。引っかかったのは以下の3つです。

1. Human のバージョンが古かった。(9セクタフォーマットに未対応)
2. フロッピーディスクが腐っていた。(古くてカビが生えていた)
3. Human上でディスクイメージをフロッピーディスクに書き込む方法を知らなかった。

Human-OS Version 3.02以上の場合について説明します。(Version 2.XXの場合は9SCSET 3.14 Rel4を使って下さい。)

フロッピーディスクを2HCでフォーマットします。

> > format /5 フロッピードライブ名:

次に、scsi.fd, root.img, usr1.img, usr2.img, ack.img, nksrc.img の各ディスクを作成する。フロッピーディスクは計6枚です。（ブートさせるだけならば scsi.fd, root.img, usr1.imgの3枚だけで良い）
fdbwr101.lzhを使って作成する場合は以下のようにします。

> > fdbwr.x -d0 -n2400 -l512 < 各ファイル名

また、 rawrite [ベクタ]を使って作成する場合は以下のようにします。 （下線部が実際の入力です。また[CR]はENTERキー）

>     > rawrite[CR]
>     RaWrite 1.2 - Write disk file to raw floppy diskette
>     Enter source filename: 各ファイル名
>     Enter destination drive: ドライブ名
>     Please insert a formatted diskette into drive ドライブ名 and press -ENTER- :[CR]
>     Reading image
>     Writing image to drive ドライブ名
>     Done.

###
3. Minix/X68kをインストールするパーティションをSCSI HDに作成する。

HumanのFORMATコマンドを使用して以下のように設定します。sd?? の意味ですが、最初の ? は、scsi の id 番号です。次の ? はパーティション番号です。
また、Minix/X68k において最大ブロックサイズは64MBです。これ以上のサイズは扱えないので作っても無駄です。

    	Part 1. Human	103M	--> /dev/sd01
    	     2. boot1	  1M	--> /dev/sd02
    	     3. boot2	  1M	--> /dev/sd03
    	     4. root	 11M	--> /dev/sd04
    	     5. usr	 64M	--> /dev/sd05

###
4. minixをブートする。

scsi.fd.imgを 0 ドライブに入れて起動します。

>     MINIX
>     Reading Boot Disk.....
>     Virtual console patches copyright 1993 Hajime Murao.
>     fdc reset
>     Booting MINIX 1.5. Copyright 1991 Prentice-Hall, Inc.
>     Insert ROOT diskette and hit RETURN (or specify rootdev)

すると、ブート・フロッピーディスクを吐き出して、上記のように root.img を 0 ドライブに入れるよう要求してきます。指示に従って、root.img を 0 ドライブに入れます。

>     Memory size = 6144K     MINIX = 601K     RAM disk = 1200K     Available = 4345K

>     RAM disk loaded.    Please remove root diskette.

>     Please insert /usr diskette to drive 0, then hit Enter key...

次に上記のように root.img を RAM disk にロードして root.img を抜いて usr1.img を 0 ドライブに入れるように要求されます。root.img を抜いて usr1.img を 0 ドライブに入れ、ENTER キーを押します。すると、いろんなメッセージを表示して最後に以下のようにログイン要求のメッセージが表示されます。(最後にエラーメッセージが出るけど気にしないで下さい)
これで、Minix/X68k の起動は終了です。

>     login:

###
5. 使用するSCSI HD用のデバイスファイルを作成します。

minix 起動後は root しかログインすることが出来ません。root のパスワードは'Geheim' です。まず root でログインします。(パスワード入力時は入力した文字が表示されませんので注意して入力してください。また大文字と小文字も認識しますので注意してください。)
さて、mknod を使ってデバイスファイル /dev/sd0* を作成します。

    	$ mknod /dev/sd02 b 7 2 0	# boot1
    	$ mknod /dev/sd03 b 7 3 0	# boot2
    	$ mknod /dev/sd04 b 7 4 0	# root
    	$ mknod /dev/sd05 b 7 5 0	# usr

４番目の引数は (SCSI ID * 16) + パーティション番号 です。

###
6. SCSI HD をパーティションに分割し、ファイルシステムを構築します。

Minix/X68k で使用するパーティションを削除します。

    	$ xscsi -r 0/2
    	$ xscsi -r 0/3
    	$ xscsi -r 0/4
    	$ xscsi -r 0/5

再度、Minix/X68k で使用する各パーティションに指定バイト数(キロバイト単位)割り当てます。

    	$ xscsi -a 0/2 1024
    	$ xscsi -a 0/3 1024
    	$ xscsi -a 0/4 11264
    	$ xscsi -a 0/5 65536

これで、ブートメニューの表示が Human68k ではなく Minix68k になります。これを行わないで次にファイルシステムを構築するとHumanが「０で除算されました」といって起動できなくなってしまいますので注意してください。私はここでもはまりました。

さて、続いてroot と usr のファイルシステムを構築します。このときファイルシステム(MINIX-FS ver1.0)の最大ブロック数の制限で65535KB以上のファイルシステムは構築できません。

    	$ mkfs /dev/sd04 11264	<-- 11MB       (= 11 x 1024     (KB))
    	$ mkfs /dev/sd05 65535	<-- 64MB - 1KB (= 64 x 1024 - 1 (KB))

###
7. ハードディスク上に基本システムを構築します。

さて、システムを構築するためにマウント用のディレクトリを作成します。

    	$ mkdir /mnt /fd0 /fd1

/dev/sd04 に root.img をコピーするために 1 ドライブに root.img を挿入する。

    	$ mount /dev/fd1 /fd1	<-- root.img をマウント
    	$ mount /dev/sd04 /mnt
    	$ cpdir -msv /fd1 /mnt
    	$ sync; sync; sync	<--- おまじないとして必ず実行してください。

/dev/sd04 はハードディスクから起動する時に root にマウントするもの、つまりシステムの本体になります。そこで起動時の設定もここで行います。
まずは、デバイスファイルの作成。

    	$ mknod /mnt/dev/sd02 b 7 2 0
    	$ mknod /mnt/dev/sd03 b 7 3 0
    	$ mknod /mnt/dev/sd04 b 7 4 0
    	$ mknod /mnt/dev/sd05 b 7 5 0

/etc/rc(/mnt/etc/rc) の書き換え。

    	$ cp /mnt/etc/rc.hd /mnt/etc/rc
    	$ vi /mnt/etc/rc で

    	'/etc/mount /dev/hd4 /usr' をコメントアウトする。
    	その下に
    	'/etc/mount /dev/sd05 /usr を追加する。

    	$ sync; sync; sync
    	$ umount /dev/fd1
    	$ eject 1		<-- root.img を取り出す

ハードディスク起動時の root にもマウント用ディレクトリを作成します。

    	$ mkdir /mnt/mnt /mnt/fd0 /mnt/fd1
    	$ umount /dev/sd04

/dev/sd05 に usr1.img 及び usr2.img をインストールします。現在 usr1.img は 0 ドライブにマウントされているので、まず usr1.img を /dev/sd05 にインストールします。

    	$ mount /dev/sd05 /mnt
    	$ cpdir -msv /usr /mnt

usr2.img を /dev/sd05 にインストールするために、usr2.img を 1 ドライブに挿入して /fd1 にマウントしコピーします。

    	$ mount /dev/fd1 /fd1
    	$ cpdir -msv /fd1 /mnt
    	$ sync; sync; sync
    	$ umount /dev/fd1
    	$ umount /dev/sd05
    	$ eject 1

/dev/sd05(/usr)のインストールが終了したので、現在 usr1.img が /usr にマウントしているので、これをアンマウントしてから /dev/sd05 を /usr にマウントし直します。

    	$ sync; sync; sync
    	$ umount /dev/fd0
    	$ mount /dev/sd05 /usr
    	$ eject 0		<-- usr1.img を取り出す

###
8. カーネル再構築用にack.img 及び nksrc.img をインストールします。

ack.img を 0 ドライブに nksrc.img を 1 ドライブに挿入し、それぞれ /fd0 及び /fd1 にマウントします。

    	$ mount /dev/fd0 /fd0
    	$ mount /dev/fd1 /fd1

まず、ack.img をインストールします。既に /dev/sd05 は /usr にマウントされています。

    	$ cpdir -msv /fd0 /usr

次に nksrc.img をインストールし、挿入したフロッピーディスクを取り出します。

    	$ cpdir -msv /fd1 /usr
    	$ sync; sync; sync
    	$ umount /dev/fd0
    	$ eject 0		<-- ack.img を取り出す
    	$ umount /dev/fd1
    	$ eject 1		<-- nksrc.img を取り出す

###
9. カーネルの再構築

・ヘッダーファイルの修正（ルートパーティションの設定）

>     vi /usr/include/minix/boot.h で
>     '#define DROOTDEV (DEV_RAM + 0)' を
>     '#define DROOTDEV (DEV_SD0 + 4)' に修正

> ここでの 4 の数字の計算方法は、(SCSIのID番号 * 16) + パーティション番号で求めます。

・コンパイルおよびブートパーティション書き込み

>     $ chmem =200000 /usr/bin/make	<-- 標準だとNo Memory ... といわれる場合がある
>     $ cd /usr/src/fs
>     $ make
>     $ cd /usr/src/mm
>     $ make
>     $ cd /usr/src/kernel

> ここで Makefile を書き換えます。今回は SCSI-HD なので Makefile の 19, 20 行目のWINI = wini, WINI2 = x6scsi のところをコメントアウト（先頭の # を取る）します。
> Makefile の変更が終わったら kernel を make します。

>     $ make sd		<-- SCSI-HD ブート用イメージの作成

> ブート用イメージが /tmp/minix_sd というファイル名で作成されますので、これを /dev/sd02(boot1) 及び /dev/sd03(boot2) に書き込みます。/dev/sd03(boot2)はカーネルを書き換えた時に片方から起動できなくなっても、もう一方から起動できるようにするためのもので、とても便利です。

>     $ xscsi -bl 0/2 /tmp/minix_sd
>     $ xscsi -bl 0/3 /tmp/minix_sd

> ここでの 0/2 または 0/3 は SCSIのID番号/パーティション番号 でブートパーティションを表します。
> 最後の後始末を行います。

>     $ cd /usr/src
>     $ make clean
>     $ sync; sync; sync

これでカーネルの再構築の作業が終了です。shutdown を実行して電源を切れるようにしてください。

###
10. BM(freeのブートメニュー)でbootパーティションを選択し、再起動および動作確認。